Edition: 1
Publucation year: 2023
3 Generating the Street Network
4 Applying the 'SandBox' Method
import numpy as np
import math
import pandas as pd
import geopandas as gpd
import networkx as nx
import powerlaw
import shapely.ops as so
import shapely.wkt
import matplotlib.pyplot as plt
from shapely import ops
from shapely.geometry import Point, box, MultiPoint, LineString, Polygon, MultiPolygon, MultiLineString, GeometryCollection
from shapely.strtree import STRtree
from FractalCity import *
np.__version__, pd.__version__, gpd.__version__, nx.__version__, powerlaw.__version__, shapely.__version__
('1.19.5', '1.1.5', '0.7.0', '2.5.1', '1.5', '1.8.4')
data = ReadData('/home/renan/Documentos/Análise de dados/')
df_nodes, df_links = data.read_nodes_and_links('Lavras', 'MG', 'Sudeste')
df_nodes.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 3510 entries, 0 to 3509 Data columns (total 6 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 osmid 3510 non-null int64 1 y 3510 non-null float64 2 x 3510 non-null float64 3 lon 3510 non-null float64 4 lat 3510 non-null float64 5 geometry 3510 non-null object dtypes: float64(4), int64(1), object(1) memory usage: 150.9+ KB
df_nodes.head()
| osmid | y | x | lon | lat | geometry | |
|---|---|---|---|---|---|---|
| 0 | 353501750 | 7.650208e+06 | 499626.949178 | -45.003596 | -21.249785 | POINT (-45.0035955 -21.2497847) |
| 1 | 1431958418 | 7.650181e+06 | 499606.364850 | -45.003794 | -21.250029 | POINT (-45.0037939 -21.2500289) |
| 2 | 1432666855 | 7.650172e+06 | 499627.344245 | -45.003592 | -21.250102 | POINT (-45.0035917 -21.2501023) |
| 3 | 353502592 | 7.649695e+06 | 500488.805280 | -44.995289 | -21.254418 | POINT (-44.9952887 -21.254418) |
| 4 | 3901738964 | 7.649714e+06 | 500355.526301 | -44.996573 | -21.254240 | POINT (-44.9965733 -21.2542403) |
df_links.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 9187 entries, 0 to 9186 Data columns (total 4 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 u 9187 non-null int64 1 v 9187 non-null int64 2 length 9187 non-null float64 3 geometry 9187 non-null object dtypes: float64(1), int64(2), object(1) memory usage: 251.3+ KB
df_links.head()
| u | v | length | geometry | |
|---|---|---|---|---|
| 0 | 353501750 | 1431958418 | 36.585741 | LINESTRING (-45.0035955 -21.2497847, -45.00379... |
| 1 | 353501750 | 1432666855 | 37.936648 | LINESTRING (-45.0035955 -21.2497847, -45.00359... |
| 2 | 1431958418 | 1432666855 | 24.155855 | LINESTRING (-45.0037939 -21.25002890000001, -4... |
| 3 | 1431958418 | 1432666850 | 66.633354 | LINESTRING (-45.0037939 -21.25002890000001, -4... |
| 4 | 1432666855 | 1430927687 | 142.154239 | LINESTRING (-45.0035917 -21.25010230000001, -4... |
sn = StreetNetwork()
help(sn)
Help on StreetNetwork in module FractalCity object: class StreetNetwork(builtins.object) | A class to generate the street network from node information | (osmid, x, y, lon, lat, geometry) and links (u, v, length, geometry) | of previously read csv files. | | Methods | ------- | generate_network(df_nodes, df_links) | Method to generate the street network from the information of the nodes and the | links. | | ----------------------------------------- | | cyclomatic_number(G) | It describes the number of edges that must be removed from a network to ensure | that no network cycles remain. | | alpha_number(G) | It describes the ratio between the number of circuits (loops) and the maximum | number of circuits in the network with the same number of nodes. | | beta_number(G) | It measures the frequency of connections based on the relationship between the | number of links and the number of nodes in the network. | | gamma_number(G) | It measures the frequency of links and is defined as the ratio between the number | of links and the maximum possible number of links. | | Ref. | | Sharifi, A. Resilient Urban Forms: A Review of Literacture on Street and Street Network. 2018. | | ----------------------------------------- | | network_area(G) | Convex hull area formed by the network nodes. | | network_perimeter(G) | Convex hull perimeter formed by the network nodes. | | ----------------------------------------- | | network_efficiency(G) | Calculate the street network efficiency. | | Ref. | | "Paolo Crucitti, Vito Latora, and Sergio Porta. Centrality measures in | spatial networks of urban streets. Phys. Rev. E 73, 036125 – Published 24 March 2006" | | ---------------------------------------- | | generate_routes(G) | Generate 1000 routes on the street network as default. | | plot_network(G) | Method to plot the street network. | | Methods defined here: | | alpha_number(self, G) | Method for calculating the alpha number, which describes the ratio between the number of circuits | (loops) and the maximum number of circuits in the network with the same number of nodes. | | Parameters | ---------- | networkx.classes.graph.Graph : G | Street network. | | Returns | ------- | float | Alpha number. | | beta_number(self, G) | Method for calculating the beta number, which measures the frequency of connections based on the | relationship between the number of links and the number of nodes in the network. | | Parameters | ---------- | networkx.classes.graph.Graph : G | Street network. | | Returns | ------- | float | Beta number. | | cyclomatic_number(self, G) | Method for calculating the cyclomatic number, which describes the number of edges | that must be removed from a network to ensure that no network cycles remain. | | Parameters | ---------- | networkx.classes.graph.Graph : G | Street network. | | Returns | ------- | float | Cyclomatic number. | | gamma_number(self, G) | Method for calculating the gamma number, measures the frequency of links and is defined as the | ratio between the number of links and the maximum possible number of links. | | Parameters | ---------- | networkx.classes.graph.Graph : G | Street network. | | Returns | ------- | float | Gamma number. | | generate_network(self, df_nodes, df_links) | Method to generate the street network from the information of the nodes and the | links. The node positions are longitude and latitude. | | Parameters | ---------- | pandas.core.frame.DataFrame : df_nodes | Dataframe with node information. | | pandas.core.frame.DataFrame : df_links | Dataframe with the link information. | | returns | ------- | G : networkx.classes.graph.Graph | Street network. | | generate_routes(self, G, routes=1000) | Method to generate 1000 routes as default on the street nework. | | Parameters | ---------- | networkx.classes.graph.Graph: G | Street network. | | int : routes | Number of routes that will be generated. | | Returns | ------- | dict | Dictionary with euclidian, chemical, average euclidian distances, | the routes (list of nodes) and position nodes of each route. | | | Details | | ---------------------------------------------------------------------- | variable | interpretation | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | 'euclidian_distance' | list of the euclidian distance | ---------------------------------------------------------------------- | 'average_euclidian_distance' | list of the average euclidian distance | ---------------------------------------------------------------------- | 'chemical_distance' | list of the chemical distance | ---------------------------------------------------------------------- | 'chemical_routes' | list of the chemical routes | ---------------------------------------------------------------------- | 'chemical_routes_pos' | list of the chemical routes position | ---------------------------------------------------------------------- | | network_area(self, G) | Method for calculating the network area based on the convex hull. | | Parameters | ---------- | networkx.classes.graph.Graph : G | Street network. | | Returns | ------- | float | Convex hull area formed by the street network nodes. | | network_efficiency(self, G) | Method to calculate the street network efficiency. | | Parameters | ---------- | networkx.classes.graph.Graph : G | Street network. | | Returns | ------- | float | Network efficiency. | | Ref. | | "Paolo Crucitti, Vito Latora, and Sergio Porta. Centrality measures in | spatial networks of urban streets. Phys. Rev. E 73, 036125 – Published 24 March 2006" | | network_perimeter(self, G) | Method for calculating the network perimeter based on the convex hull. | | Parameters | ---------- | networkx.classes.graph.Graph : G | Street network. | | Returns | ------- | float | Convex hull perimeter formed by the street network nodes. | | plot_network(self, G, kwargs) | Generates the image of the street network of the city. | | Parameters | ---------- | networkx.classes.graph.Graph : G | Street network. | | dict : kwargs | Dictionary with parameters for the plot. | | Details: | -------------------------------------- | variable | type | exemple | -------------------------------------- | -------------------------------------- | 'figsize' | tuple of int | (10, 10) | -------------------------------------- | 'node_size' | int | 0 | -------------------------------------- | 'edge_width' | int | 1 | -------------------------------------- | | Returns | ------- | plt.image | Image of the street network. | | ---------------------------------------------------------------------- | Data descriptors defined here: | | __dict__ | dictionary for instance variables (if defined) | | __weakref__ | list of weak references to the object (if defined)
G = sn.generate_network(df_nodes, df_links)
kwargs = {'figsize': (8,8),
'node_size': 0,
'edge_width': 1}
sn.plot_network(G, kwargs)
sn.cyclomatic_number(G)
1616
sn.alpha_number(G)
0.23036350677120457
sn.beta_number(G)
1.46011396011396
sn.gamma_number(G)
0.4869821360699354
sn.network_area(G)/10e6
24.262611687709807
sn.network_perimeter(G)/10e3
5.969933874939586
sb = SandBox()
help(sb)
Help on SandBox in module FractalCity object: class SandBox(builtins.object) | Class to calculate the generalized fractal dimension of the street network and | population using the "sandbox" method. | | Methods | ------- | generate_grid(df, threshold = 50.0, gridsize = 15, epsg = True): | Method to generate a grid over the street network. | | generate_points(x_red, y_red, x_blue, y_blue, x_gray, y_gray): | Method to generate points for estimating the object's fractal dimension. | | apply_sandbox_on_street_network(num_div_rmin = 100, num_div_rmax = 10, | num_intervals = 100, fraction = 2): | Method to carry out the steps of the "sandbox" algorithm on street network. | | get_sandbox_data_from_street_network: | Method for obtaining data from calculations on street network. | | apply_sandbox_on_population(multipolygon, populs, x_red, y_red, x_gray, y_gray, | num_div_rmin = 100, num_div_rmax = 10, num_intervals = 100, fraction = 2): | Method for obtaining data from calculations on population geometries. | | street_network_generalized_dimension(data, moment_list) | Method to estimating the generalized fractal dimension of the street network. | | street_network_mass_exponent(dq_list, moment_list) | Method to estimating the mass exponents of the street network. | | street_network_multifractal_spectrum(tau_list, moment_list) | Method to estimating the multifractal spectrum of the street network. | | population_generalized_dimension(data, moment_list) | Method to estimating the generalized fractal dimension of the population. | | population_mass_exponent(dq_list, moment_list) | Method to estimating the mass exponents of the population. | | population_multifractal_spectrum(tau_list, moment_list) | Method to estimating the generalized fractal dimension of the population. | | References | ---------- | | 1. Tél, T., Á. Fülöp, and T. Vicsek (1989), Determination of fractal dimensions | for geometrical multifractals, Physica A, 159, 155 – 166. | | 2. Vicsek, T. (1990), Mass multifractals, Physica A, 168, 490 – 497. | | 3. Vicsek, T., F. Family, and P. Meakin (1990), Multifractal geometry of | diffusion-limited aggregates, Europhys. Lett., 12(3), 217 – 222. | | 4. S. G. De Bartolo, R. Gaudio, and S. Gabriele, “Multifractal analysis of river networks: | Sandbox approach,” Water Resources Research, vol. 40, no. 2, 2004. | | Methods defined here: | | __init__(self) | Initialize self. See help(type(self)) for accurate signature. | | apply_sandbox_on_population(self, multipolygon, populs, x_red, y_red, x_gray, y_gray, num_div_rmin=100, num_div_rmax=10, num_intervals=100, fraction=2) | Method to calculating the fractal dimension of population. | | Parameters | ---------- | | shapely.geometry.GeometryCollection : multipolygon | Collection of geometries of census tracts. | | list : populs | List of population in each census tract. | | list : x_red | List of x's or lon's coordinates (epsg format: 4326) of the closest found points | of the points of the object that you want to mediate the fractal dimension. | | list : y_red | List of y's or lat's coordinates (epsg format: 4326) of the closest found points | of the points of the object that you want to mediate the fractal dimension. | | list : x_gray | List of x's or lon's coordinates (epsg format: 4326) of the surrounding daw points | to the object you want to measure the fractal dimension. | | list : x_gray | List of y's or lat's coordinates (epsg format: 4326) of the surrounding daw points | to the object you want to measure the fractal dimension. | | int : num_div_rmin | Number of divisions to obtain the minimum radius in relation to the diagonal of the enclosing box. | (e.g., num_div_rmin = 100 means to choose a minimum radius corresponding to 1% of the size | the diagonal of the enclosing box). Default num_div_rmin = 100. | | int : num_div_rmax | Number of divisions to obtain the minimum radius in relation to the diagonal of the enclosing box. | (e.g., num_div_rmax = 10 means choose a maximum radius corresponding to 10% of the size | the diagonal of the enclosing box). Default num_div_rmax = 10. | | int : num_intervals | Number of rays that will be counted. | | int : fraction | Fraction of the points obtained that are at a certain distance from the object points (e.g., network) | in which the rays will be generated and the measurements will be carried out. Default fractaion = 2. | | Details: | ---------------------------- | fraction interpretation | ---------------------------- | ---------------------------- | 1 | 100% of the | | points | ---------------------------- | 2 | 50% of the | | points | ---------------------------- | 4 | 25% of the | | points | ---------------------------- | 6 | 12.5% of the | | points | ---------------------------- | 8 | 6.25% of the | | points | ---------------------------- | | Returns | ------- | dict : dict_data_population | Dictionary with data from calculations. | | | Details: | --------------------------------------------------------------------- | Variable | Type | Interpretation | --------------------------------------------------------------------- | --------------------------------------------------------------------- | 'r' | List | Radii (meter) of the generated | | of lists | circles | -------------------------------------------------------------------- | 'N' | List | Number of populations | | of lists | found | --------------------------------------------------------------------- | 'total_population' | float | Total population | --------------------------------------------------------------------- | 'box_size' | float | box size length (meter) | --------------------------------------------------------------------- | 'analized_points' | List of | Fraction of points (coordinades) | | tuple | where the the measurements will | | | be taken | --------------------------------------------------------------------- | | apply_sandbox_on_street_network(self, num_div_rmin=100, num_div_rmax=10, num_intervals=100, fraction=2) | Method to carry out the steps of the "sandbox" algorithm. | | Parameters | ---------- | | int : um_div_rmin | Number of divisions to obtain the minimum radius in relation to the diagonal of the enclosing box. | (e.g., num_div_rmin = 100 means to choose a minimum radius corresponding to 1% of the size | the diagonal of the enclosing box). | | int : num_div_rmax | Number of divisions to obtain the minimum radius in relation to the diagonal of the enclosing box. | (e.g., num_div_rmax = 10 means choose a maximum radius corresponding to 10% of the size | the diagonal of the enclosing box). | | int : num_intervals | Number of rays that will be generated. | | int : fraction | Fraction of the points obtained that are at a certain distance from the object points (e.g., network) | in which the rays will be generated and the measurements will be carried out. | | Details: | ---------------------------- | fraction interpretation | ---------------------------- | ---------------------------- | 1 | 100% of the | | points | ---------------------------- | 2 | 50% of the | | points | ---------------------------- | 4 | 25% of the | | points | ---------------------------- | 6 | 12.5% of the | | points | ---------------------------- | 8 | 6.25% of the | | points | ---------------------------- | | Returns | ------- | str : message | Message confirming the execution of the calculation. | | generate_grid(self, df, threshold=50.0, gridsize=15, epsg=True) | Method for finding the points of a grid, defined by "gridsize" (default: 15 x 15 grid), | closest to a certain distance, defined by "threshold" (default: 50 meters), from the po- | ints of a given object (e.g., street network). The coordinates format it will be epsg | 4326 (latitude and longitude). | | Parameters | ---------- | float : threshold | Threshold to find the points (reds). Default: 50 meters. | | int : gridsize | Grid size. Default: 15 x 15 grid. (e.g., 15 x 15 = 225 evenly spaced dots). | | Returns | ------- | tuple of lists: (x_red, y_red, x_blue, y_blue, x_gray, y_gray) | | Details: | | ---------------------------------------------------------------------------- | variable | type | description | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | x_red | list | List of x's or lon's coordinates (epsg format: 4326) | | | of the closest found points of the points of the object | | | that you want to estimate the fractal dimension. | ---------------------------------------------------------------------------- | y_red | list | List of y's or lat's coordinates (epsg format: 4326) | | | of the closest found points of the points of the object | | | that you want to estimate the fractal dimension. | ---------------------------------------------------------------------------- | x_blue | list | List of x's or lon's coordinates (epsg format: 4326) | | | of the object's points that are wants to estimate | | | the fractal dimension. | ---------------------------------------------------------------------------- | y_blue | list | List of y's or lat's coordinates (epsg format: 4326) | | | of the object's points that are wants to estimate | | | the fractal dimension. | ---------------------------------------------------------------------------- | x_gray | list | List of x's or lon's coordinates (epsg format: 4326) | | | of the grid. | ---------------------------------------------------------------------------- | y_gray | list | List of y's or lat's coordinates (epsg format: 4326) | | | of the grid. | ---------------------------------------------------------------------------- | | generate_points(self, x_red, y_red, x_blue, y_blue, x_gray, y_gray) | Method to create the points for estimating the object's fractal dimension. | | Parameters | ---------- | list : x_red | List of x's or lon's coordinates (epsg format: 4326) of the closest found points | of the points of the object that you want to mediate the fractal dimension. | | list : y_red | List of y's or lat's coordinates (epsg format: 4326) of the closest found points | of the points of the object that you want to mediate the fractal dimension. | | list : x_blue | List of x's or lon's coordinates (epsg format: 4326) of the object's points that are | wants to mediate the fractal dimension. | | list : y_blue | List of y's or lat's coordinates (epsg format: 4326) of the object points that | wants to mediate the fractal dimension. | | list : x_gray | List of x's or lon's coordinates (epsg format: 4326) of the surrounding daw points | to the object you want to measure the fractal dimension. | | list : x_gray | List of y's or lat's coordinates (epsg format: 4326) of the surrounding daw points | to the object you want to measure the fractal dimension. | | Returns | ------- | str : message | Message confirming the creation of the points. | | get_sandbox_data_from_street_network(self) | Method for obtaining data from calculations. | | Returns | ------- | dict : dict_data | Dictionary with data from calculations. | | | Details: | --------------------------------------------------------------------- | variable | type | interpretation | --------------------------------------------------------------------- | --------------------------------------------------------------------- | 'r' | List | Radii (meter) of the generated | | of lists | circles | -------------------------------------------------------------------- | 'N' | List | Number of points | | of lists | found | --------------------------------------------------------------------- | 'total_points' | float | Total number of points | | | of the object | --------------------------------------------------------------------- | 'box_size' | float | box size length (meter) | --------------------------------------------------------------------- | 'analized_points' | List of | Fraction of points (coordinades) | | tuple | where the the measurements will | | | be taken | --------------------------------------------------------------------- | | population_generalized_dimension(self, data, moment_list) | Method to calculate the generalized fractal dimension based on "sandbox" strategy | of the population. | | Parameters | ---------- | | dict : data | The dictionary with data generated by the "apply_sandbox_on_population". | | list : moment_list | The list of order moments (e.g, a linear space betweenn [-q, q], when q | is a real number). | | Returns | ------- | dict : dict_gen_dim | Dictionary with data generated. | | | Details: | -------------------------------------------------------------------------------------- | variable | type | description | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | 'gen_dim_population' | list | generalized fractal dimensions | -------------------------------------------------------------------------------------- | 'gen_dim_population_std' | list | standard error of the generalized | | | fractal dimensions | -------------------------------------------------------------------------------------- | 'gen_dim_population_intercept' | list | intercept of the generalized | | | fractal dimensions | -------------------------------------------------------------------------------------- | 'gen_dim_population_r2' | list | R2 of the generalized | | | fractal dimensions | -------------------------------------------------------------------------------------- | | population_mass_exponent(self, dq_list, moment_list) | Method for calculating mass exponents of the population. The exponents control | how the probability moment orders, q, scale with the side size of the covering balls. | | Parameters | ---------- | list : dq_list | List of the generalized dimensions of the population. | | list : moment_list | List of orders moment (e.g, a linear space betweenn [-q, q], when q | is a real number). | | Returns | ------- | list : taus | List of mass expontents of the population. | | population_multifractal_spectrum(self, taus_list, moment_list) | Method to calculating multifractal spectrum. "alpha" are the Lipschitz-Hölder exponents | and f(alpha)" are the multifractal spectra. | | Parameters | ---------- | list : tau_list | List of the mass exponents of the population. | | list : moment_list | List of orders moment (e.g, a linear space betweenn [-q, q], when q | is a real number). | | Returns | ------- | tuple (list, list) : alpha_list, falpha_list | 'alpha_list' is the list of Lipschitz-Hölder exponents and 'falpha_list' | is the list of multifractal spectra of the population. | | street_network_generalized_dimension(self, data, moment_list) | Method to calculate the generalized fractal dimension based on "sandbox" strategy | of the street network. | | Parameters | ---------- | | dict : data | The dictionary with data generated by the "get_sandbox_data_from_street_network". | | list : moment_list | The list of order moments (e.g, a linear space betweenn [-q, q], when q | is a real number). | | Returns | ------- | dict : dict_gen_dim | Dictionary with data generated. | | | Details: | -------------------------------------------------------------------------------------- | variable | type | description | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | 'gen_dim_street_network' | list | generalized fractal dimensions | -------------------------------------------------------------------------------------- | 'gen_dim_street_network_std' | list | standard error of the generalized | | | fractal dimensions | -------------------------------------------------------------------------------------- | 'gen_dim_street_network_intercept' | list | intercept of the generalized | | | fractal dimensions | -------------------------------------------------------------------------------------- | 'gen_dim_street_network_r2' | list | R2 of the generalized | | | fractal dimensions | -------------------------------------------------------------------------------------- | | street_network_mass_exponent(self, dq_list, moment_list) | Method for calculating mass exponents. The exponents control | how the probability moment orders, q, scale with the side size of the covering balls. | | Parameters | ---------- | list : dq_list | List of the generalized dimensions of the street network. | | list : moment_list | List of orders moment (e.g, a linear space betweenn [-q, q], when q | is a real number). | | Returns | ------- | list : taus | List of mass expontents of the street network. | | street_network_multifractal_spectrum(self, tau_list, moment_list) | Method to calculating multifractal spectrum. "alpha" are the Lipschitz-Hölder exponents | and f(alpha)" are the multifractal spectra. | | Parameters | ---------- | list : tau_list | List of the mass exponents of the street network. | | list : moment_list | List of orders moment (e.g, a linear space betweenn [-q, q], when q | is a real number). | | Returns | ------- | tuple (list, list) : alpha_list, falpha_list | 'alpha_list' is the list of Lipschitz-Hölder exponents and 'falpha_list' | is the list of multifractal spectra of the street network. | | ---------------------------------------------------------------------- | Data descriptors defined here: | | __dict__ | dictionary for instance variables (if defined) | | __weakref__ | list of weak references to the object (if defined)
lon_red, lat_red, lon_blue, lat_blue, lon_gray, lat_gray = sb.generate_grid(df_nodes)
sb.generate_points(lon_red, lat_red, lon_blue, lat_blue, lon_gray, lat_gray)
Points created!
sb.apply_sandbox_on_street_network(num_div_rmin = 50, num_div_rmax = 2, num_intervals = 50, fraction = 4)
Sandbox method successfully applied!
street_network_data = sb.get_sandbox_data_from_street_network()
lon_p, lat_p = [pos[0] for pos in street_network_data['analized_points']], [pos[1] for pos in street_network_data['analized_points']]
fig, ax = plt.subplots(figsize=(8,8))
ax.plot(lon_gray, lat_gray, 'o', markersize = 1, color='gray', label = 'grid')
ax.plot(lon_blue, lat_blue, 'o', markersize = 2, color='blue', label = 'street network nodes')
ax.plot(lon_red, lat_red, 'o', markersize = 3, color='red', label = 'points found')
ax.plot(lon_p, lat_p, 'o', markersize = 4, color='green', label = 'analized points')
ax.set_xlabel('lon')
ax.set_ylabel('lat')
plt.title('Lavras, MG')
plt.legend()
plt.show()
average = [np.mean([street_network_data['N'][i][j] for i in range(len(street_network_data['N']))]) for j in range(len(street_network_data['N'][0]))]
fig, ax = plt.subplots(figsize=(5,5))
ax.plot(street_network_data['r'], street_network_data['N'], 'o' , fillstyle = 'none')
ax.plot(street_network_data['r'][0], average, 'k-', label = 'average')
ax.set_xscale('log')
ax.set_yscale('log')
ax.set_xlabel(r'$r$')
ax.set_ylabel(r'$N(r)$')
plt.title('Street Network: Lavras, MG')
plt.legend()
plt.show()
moment_list = list(np.linspace(-10, 10, 100))
dict_gen_dim = sb.street_network_generalized_dimension(street_network_data, moment_list)
fig, ax = plt.subplots(figsize=(5,5))
ax.plot(moment_list, dict_gen_dim['gen_dim_street_network'], 's', fillstyle='none', label = 'Generalized Fractal Dimension')
ax.set_xlabel(r'$q$')
ax.set_ylabel(r'$D_{q}$')
plt.title('Street Network: Lavras, MG')
plt.legend()
plt.show()
q0_index = moment_list.index(0.10101010101010033)
q1_index = moment_list.index(1.1111111111111107)
q2_index = moment_list.index(2.121212121212121)
D0 = round(dict_gen_dim['gen_dim_street_network'][q0_index],2)
D0_std = round(dict_gen_dim['gen_dim_street_network_std'][q0_index], 2)
D0_r2 = round(dict_gen_dim['gen_dim_street_network_r2'][q0_index],2)
D1 = round(dict_gen_dim['gen_dim_street_network'][q1_index],2)
D1_std = round(dict_gen_dim['gen_dim_street_network_std'][q1_index], 2)
D1_r2 = round(dict_gen_dim['gen_dim_street_network_r2'][q1_index],2)
D2 = round(dict_gen_dim['gen_dim_street_network'][q2_index],2)
D2_std = round(dict_gen_dim['gen_dim_street_network_std'][q2_index], 2)
D2_r2 = round(dict_gen_dim['gen_dim_street_network_r2'][q2_index],2)
print(f'Box-counting: {D0,D0_std,D0_r2}\nInformation: {D1,D1_std,D1_r2}\nCorrelation: {D2,D2_std,D2_r2}', sep='\n')
Box-counting: (1.65, 0.03, 1.0) Information: (1.58, 0.04, 0.99) Correlation: (1.53, 0.06, 0.98)
tau_list = sb.street_network_mass_exponent(dict_gen_dim['gen_dim_street_network'], moment_list)
fig, ax = plt.subplots(figsize=(5,5))
ax.plot(moment_list, tau_list, 's', fillstyle='none', color='tab:green', label = 'Mass exponents')
ax.set_xlabel(r'$q$')
ax.set_ylabel(r'$\tau(q)$')
plt.title('Street Network: Lavras, MG')
plt.legend()
plt.show()
alpha, falpha = sb.street_network_multifractal_spectrum(tau_list, moment_list)
fig, ax = plt.subplots(figsize=(5,5))
ax.plot(alpha, falpha, 's', fillstyle='none', color = 'tab:orange', label = 'Multifractal spectrum')
ax.set_xlabel(r'$\alpha$')
ax.set_ylabel(r'$f(\alpha)$')
plt.title('Street Network: Lavras, MG')
plt.legend()
plt.show()
pol, popul = data.read_polygons_populations('Lavras', 'MG', 'Sudeste')
population_data = sb.apply_sandbox_on_population(pol, popul, lon_red, lat_red, lon_gray, lat_gray, num_div_rmin = 50, num_div_rmax = 2, num_intervals = 50, fraction = 4)
/home/renan/Documentos/Análise de dados/FractalCity.py:1058: ShapelyDeprecationWarning: STRtree will be changed in 2.0.0 and will not be compatible with versions < 2. tree = STRtree(multipolygon.geoms)
lon_p, lat_p = [pos[0] for pos in population_data['analized_points']], [pos[1] for pos in population_data['analized_points']]
fig, ax = plt.subplots(figsize=(8,8))
ax.plot(lon_gray, lat_gray, 'o', markersize = 1, color='gray', label = 'grid')
ax.plot(lon_blue, lat_blue, 'o', markersize = 2, color='blue', label = 'street network nodes')
ax.plot(lon_red, lat_red, 'o', markersize = 3, color='red', label = 'points found')
ax.plot(lon_p, lat_p, 'o', markersize = 4, color='green', label = 'analized points')
ax.set_xlabel('lon')
ax.set_ylabel('lat')
plt.title('Lavras, MG')
plt.legend()
plt.show()
average = [np.mean([population_data['N'][i][j] for i in range(len(population_data['N']))]) for j in range(len(population_data['N'][0]))]
fig, ax = plt.subplots(figsize=(5,5))
ax.plot(population_data['r'], population_data['N'], 'o' , fillstyle = 'none')
ax.plot(population_data['r'][0], average, 'k-', label = 'average')
ax.set_xscale('log')
ax.set_yscale('log')
ax.set_xlabel(r'$r$')
ax.set_ylabel(r'$N(r)$')
plt.title('Population: Lavras, MG')
plt.legend()
plt.show()
dict_gen_dim = sb.population_generalized_dimension(population_data, moment_list)
fig, ax = plt.subplots(figsize=(5,5))
ax.plot(moment_list, dict_gen_dim['gen_dim_population'], 'h', fillstyle='none', label = 'Generalized Dimension')
ax.set_xlabel(r'$q$')
ax.set_ylabel(r'$D_{q}$')
plt.title('Population: Lavras, MG')
plt.legend()
plt.show()
q0_index = moment_list.index(0.10101010101010033)
q1_index = moment_list.index(1.1111111111111107)
q2_index = moment_list.index(2.121212121212121)
D0 = round(dict_gen_dim['gen_dim_population'][q0_index],2)
D0_std = round(dict_gen_dim['gen_dim_population_std'][q0_index], 2)
D0_r2 = round(dict_gen_dim['gen_dim_population_r2'][q0_index],2)
D1 = round(dict_gen_dim['gen_dim_population'][q1_index],2)
D1_std = round(dict_gen_dim['gen_dim_population_std'][q1_index], 2)
D1_r2 = round(dict_gen_dim['gen_dim_population_r2'][q1_index],2)
D2 = round(dict_gen_dim['gen_dim_population'][q2_index],2)
D2_std = round(dict_gen_dim['gen_dim_population_std'][q2_index], 2)
D2_r2 = round(dict_gen_dim['gen_dim_population_r2'][q2_index],2)
print(f'Box-counting: {D0,D0_std,D0_r2}\nInformation: {D1,D1_std,D1_r2}\nCorrelation: {D2,D2_std,D2_r2}', sep='\n')
Box-counting: (2.79, 0.1, 0.98) Information: (1.95, 0.06, 0.99) Correlation: (1.63, 0.05, 0.99)
tau_list = sb.population_mass_exponent(dict_gen_dim['gen_dim_population'], moment_list)
fig, ax = plt.subplots(figsize=(5,5))
ax.plot(moment_list, tau_list, 'h', fillstyle='none', color='tab:green', label = 'Mass exponents')
ax.set_xlabel(r'$q$')
ax.set_ylabel(r'$\tau(q)$')
plt.title('Population: Lavras, MG')
plt.legend()
plt.show()
alpha, falpha = sb.population_multifractal_spectrum(tau_list, moment_list)
fig, ax = plt.subplots(figsize=(5,5))
ax.plot(alpha, falpha, 'h', fillstyle='none', color = 'tab:orange', label = 'Multifractal spectrum')
ax.set_xlabel(r'$\alpha$')
ax.set_ylabel(r'$f(\alpha)$')
plt.title('Population: Lavras, MG')
plt.legend()
plt.show()
dict_routes = sn.generate_routes(G)
euclidian_distance = dict_routes['euclidian_distance']
chemical_distance = dict_routes['chemical_distance']
average_euclidian_distance = dict_routes['average_euclidian_distance']
chemical_routes = dict_routes['chemical_routes']
chemical_routes_pos = dict_routes['chemical_routes_pos']
fig, ax = plt.subplots(figsize=(5,5))
ax.plot(average_euclidian_distance, chemical_distance, 'o', fillstyle='none', color = 'tab:blue', label = 'data')
ax.set_xscale('log')
ax.set_yscale('log')
ax.set_xlabel(r'$r$')
ax.set_ylabel(r'$\ell$')
plt.title('Chem. and Euclid. distance: Lavras, MG')
plt.legend()
plt.show()
fig, ax = plt.subplots(figsize=(5,5))
average_straightness = np.divide(average_euclidian_distance, chemical_distance)
ax.plot(average_euclidian_distance, average_straightness, 'o', fillstyle='none', color = 'tab:blue', label = 'data')
ax.set_xscale('log')
#ax.set_yscale('log')
ax.set_xlabel(r'$r$')
ax.set_ylabel(r'$r/\ell$')
plt.title('Straightness: Lavras, MG')
plt.legend()
plt.show()
fig, ax = plt.subplots(figsize=(5,5))
average_sinuosity = np.divide(chemical_distance, average_euclidian_distance)
ax.plot(average_euclidian_distance, average_sinuosity, 'o', fillstyle='none', color = 'tab:blue', label = 'data')
ax.set_xscale('log')
#ax.set_yscale('log')
ax.set_xlabel(r'$r$')
ax.set_ylabel(r'$\ell / r$')
plt.title('Sinuosity: Lavras, MG')
plt.legend()
plt.show()
psp = PlotStreetPopulation(pol, popul, df_nodes, df_links)
help(psp)
Help on PlotStreetPopulation in module FractalCity object:
class PlotStreetPopulation(builtins.object)
| Class to plot the street network and population in each census track.
|
| Atrributes
| ----------
| list : geo
| List of the geometries of each census track.
|
| list : popul
| List of the population of each census track.
|
| pandas.core.frame.DataFrame : df_nodes
| Data frame with the nodes information.
|
| pandas.core.frame.DataFrame : df_links
| Data frame with the links information.
|
| Method
| ------
| plot_geo_population_network(kwargs)
| Plot of the street network and population.
|
| Methods defined here:
|
| __init__(self, geo, popul, df_nodes, df_links)
| Initialize self. See help(type(self)) for accurate signature.
|
| plot_geo_population_network(self, kwargs)
| Method to plot the street network and population.
|
| Parameters
| ----------
| dict : kwargs
|
| Returns
| -------
| plt.image
| Image of the street network and population.
|
| Details:
| -----------------------------------------------------------
| variable | type | exemple
| -----------------------------------------------------------
| -----------------------------------------------------------
| 'figsize' | tuple | (10, 10)
| -----------------------------------------------------------
| 'cmap' | str | 'viridis'
| -----------------------------------------------------------
| 'legend' | bool | True
| -----------------------------------------------------------
| 'legend_kwds' | dict | {"label": "Population in 2010",
| | | "orientation": "horizontal"}
| -----------------------------------------------------------
| 'node_color' | str | 'white'
| -----------------------------------------------------------
| 'markersize' | int | 1
| -----------------------------------------------------------
| 'edge_color' | str | 'white'
| -----------------------------------------------------------
| 'linewidth' | int | 1
| -----------------------------------------------------------
| 'xlabel' | str | 'lon'
| -----------------------------------------------------------
| 'ylabel' | str | 'lat'
| -----------------------------------------------------------
| 'xlim' | tuple | (float, float)
| -----------------------------------------------------------
| 'ylim' | tuple | (float, float)
| -----------------------------------------------------------
|
| ----------------------------------------------------------------------
| Data descriptors defined here:
|
| __dict__
| dictionary for instance variables (if defined)
|
| __weakref__
| list of weak references to the object (if defined)
kwargs = {'legend': True,
'markersize': 2,
'linewidth': 1,
'node_color': 'white',
'edge_color': 'white',
'figsize': (8, 8),
'xlim': (-45.05, -44.95),
'ylim': (-21.29, -21.20),
'xlabel': 'lon',
'ylabel': 'lat',
'legend_kwds': {"label": "Population in 2010", "orientation": "vertical"},
'cmap': 'viridis'}
psp.plot_geo_population_network(kwargs)
/home/renan/.local/lib/python3.6/site-packages/descartes/patch.py:65: ShapelyDeprecationWarning: The array interface is deprecated and will no longer work in Shapely 2.0. Convert the '.coords' to a numpy array instead. for t in polygon]) /home/renan/.local/lib/python3.6/site-packages/geopandas/plotting.py:183: ShapelyDeprecationWarning: The array interface is deprecated and will no longer work in Shapely 2.0. Convert the '.coords' to a numpy array instead. segments = [np.array(linestring)[:, :2] for linestring in geoms]
[1] T. C. Halsey, M. H. Jensen, L. P. Kadanoff, I. Procaccia, and B. I. Shraiman, “Fractal measures and their singularities: The characterization of strange sets,” Phys. Rev. A, vol. 33, pp. 1141–1151, Feb 1986.
[2] T. T ́el, ́Agnes F ̈ul ̈op, and T. Vicsek, “Determination of fractal dimensions for geometrical multifractals,” Physica A: Statistical Mechanics and its Applications, vol. 159, no. 2, pp. 155–166, 1989.
[3] S. Appleby, “Multifractal characterization of the distribution pattern of the human population,” Geographical Analysis, no. 28, pp. 147–160, 1996.
[4] S. G. De Bartolo, R. Gaudio, and S. Gabriele, “Multifractal analysis of river networks: Sandbox approach,” Water Resources Research, vol. 40, no. 2, 2004.
[5] R. Murcio, A. P. Masucci, E. Arcaute, and M. Batty, “Multifractal to monofractal evolution of the london street network,” Phys. Rev. E, vol. 92, p. 062130, Dec 2015.
[6] F. S ́em ́ecurbe, C. Tannier, and S. G. Roux, “Spatial distribution of human population in france: Exploring the modifiable areal unit problem using multifractal analysis,” Geographical Analysis, vol. 48, no. 3, pp. 292–313, 2016.
[7] H. Salat, R. Murcio, and E. Arcaute, “Multifractal methodology,” Physica A: Statistical Mechanics and its Applications, vol. 473, pp. 467–487, 2017.
[8] E. Rosenberg, Fractal Dimensions of Networks. Springer Cham, 1 ed., 2021.
[9] Y. Chen, “Two sets of simple formulae to estimating fractal dimension of irregular boundaries,” Mathematical Problems in Engineering, no. 15, 2020.
[10] E. Strano, F. Simini, and M. De Nadai, “The agglomeration and dispersion dichotomy of human settlements on earth,” Sci Rep, no. 11, p. 23289, 2021.
[11] Z. Song, Y. Chen, and M. Bo, “Multifractal characteristics analysis of spatial state of prefecture-level cities in china.,” Appl. Spatial Analysis, 2023.
[12] K. Falconer, Fractal geometry: mathematical foundations and applications. John Wiley & Sons, 2004.
[13] K. Falconer, Fractals. Oxford University Press, 2013.
[14] H. Zhang, T. Lan, and Z. Li, “Fractal evolution of urban street networks in form and structure: a case study of Hong Kong,” International Journal of Geographical Information Science, vol. 36, no. 6, pp. 1100–1118, 2022.
[15] K. Shirriff, “Chapter 4 - generating fractals from voronoi diagrams,” in Chaos and Fractals (C. A. Pickover, ed.), pp. 23–25, Amsterdam: Elsevier Science, 1998.
[16] A. Bunde and S. Havlin, Fractals and Disordered System. Springer, 1992.
[17] A. Bunde and S. Havlin, Fractals in Science. Springer Berlin, Heidelberg, 1994.
[18] B. Mandelbrot, W. H. Freeman, and Company, The Fractal Geometry of Nature. Einaudi paperbacks, Henry Holt and Company, 1983.
[19] T. Fernandes, J. Filho, and I. Lopes, “Fractal signature of coronaviruses related to severe acute respiratory syndrome,” Research on Biomedical Engineering, vol. 38, 06 2020.
[20] T. Nakayama, K. Yakubo, and R. L. Orbach, “Dynamical properties of fractal networks: Scaling, numerical simulations, and physical realizations,” Rev. Mod. Phys., vol. 66, pp. 381–443, Apr 1994.
[21] B. Moore and L. P. Dasi, “Multi-fractal nature of human left ventricular trabeculae: Possible biomechanical role?,” Chaos, Solitons Fractals, vol. 57, pp. 19–23, 2013.
[22] P. Peebles, “The fractal galaxy distribution,” Physica D: Nonlinear Phenomena, vol. 38, no. 1, pp. 273–278, 1989.
[23] R. I. Abid, A. Tortum, and A. Atalay, “Fractal dimensions of road networks in amman metropolitan districts,” Alexandria Engineering Journal, vol. 60, no. 4, pp. 4203–4212, 2021.
[24] M. F. Barnsley and S. Demko, “Iterated function systems and the global construction of fractals,” Proceedings of the Royal Society of London. Series A, Mathematical and Physical Sciences, vol. 399, no. 1817, pp. 243–275, 1985.
[25] J. Alstott, E. Bullmore, and D. Plenz, “powerlaw: A python package for analysis of heavy-tailed distributions,” PLOS ONE, vol. 9, pp. 1–11, 01 2014.
[26] F. Jahanmiri and D. C. Parker, “An overview of fractal geometry applied to urban planning,” Land, vol. 11, no. 4, 2022.
[27] A. Clauset, C. R. Shalizi, and M. E. J. Newman, “Power-law distributions in empirical data,” SIAM Review, vol. 51, no. 4, pp. 661–703, 2009.
[28] A. Kartun-Giles, M. Barthelemy, and C. Dettmann, “Shape of shortest paths in random spatial networks,” Physical Review E , vol. 100, p. 2315, Sept. 2019.
[29] S. Chatterjee, “The universal relation between scaling exponents in first-passage perco- lation,” Annals of Mathematics, pp. 663–697, 2013.
[30] P. Bonacich, “Power and centrality: A family of measures,” American Journal of Soci- ology, vol. 92, no. 5, p. 1170–82, 1987.
[31] L. da F. Costa, F. A. Rodrigues, G. Travieso, and P. R. V. Boas, “Characterization of complex networks: A survey of measurements,” Advances in Physics, vol. 1, no. 56, pp. 167–242, 2007.
[32] A. S. d. Mata, “Complex Networks: a Mini-review,” Brazilian Journal of Physics, vol. 50, pp. 658–672, Oct. 2020.
[33] M. E. J. Newman, Networks: An Introduction. Oxford University Press, 2010.
[34] A. Sharifi, “Resilient urban forms: A review of literature on streets and street networks,” Building and Environment, vol. 147, pp. 171–187, 2019.
[35] P. Erd ̃os and A. R ́enyi, “On random graphs i.,” Publ. Math., p. 290, December 1959.
[36] D. Watts and S. Strogatz, “Collective dynamics of ‘small-world’ networks.,” Nature, vol. 393, p. 440–442, 1998.
[37] Z. Zhou, J. Yang, Y. Deng, and R. M. Ziff, “Shortest-path fractal dimension for percolation in two and three dimensions,” Phys. Rev. E, vol. 86, p. 061101, Dec 2012.
[38] R. C. Batac and M. T. Cirunay, “Shortest paths along urban road network peripheries,” Physica A: Statistical Mechanics and its Applications, vol. 597, p. 127255, 2022.
[39] A.-L. Barab ́Asi and H. E. Staley, Fractal Concepts in Surface Growth. Cambridge University Press, 1995.
[40] A.-L. Barabasi and R. Albert, “Albert, r.: Emergence of scaling in random networks.,” Science (New York, N.Y.), vol. 286, pp. 509–12, 11 1999.
[41] R. Albert and A.-L. Barab ́asi, “Statistical mechanics of complex networks,” Rev. Mod. Phys., vol. 74, pp. 47–97, Jan 2002.
[42] W. Garrison, “Connectivity of the interstate highway system.,” Papers of the Regional Science Association, p. 121–137, 6 1960.
[43] K. Kansky., “The structure of transportation networks: Relationships between network geography and regional characteristics.,” Chicago: University of Chicago, 1963. Research Paper No. 84., 1963.
[44] P. Haggett and R. Chorley., “Network analysis in geography.,” Arnold, London,, 1972.
[45] C. Ducruet and I. Lugo, “Structure and dynamics of transportation networks: Models, methods, and applications,” 08 2011.
[46] S. Lunag ́omez, S. C. Olhede, and P. J. Wolfe, “Modeling network populations via graph distances,” Journal of the American Statistical Association, vol. 116, no. 536, pp. 2023–2040, 2021.
[47] S. Lmmer, B. Gehlsen, and D. Helbing, “Scaling laws in the spatial structure of urban road networks,” Physica A: Statistical Mechanics and its Applications, vol. 363, no. 1, pp. 89–95, 2006. Information and Material Flows in Complex Networks.
[48] M. Li, R.-R. Liu, L. L ̈u, M.-B. Hu, S. Xu, and Y.-C. Zhang, “Percolation on complex networks: Theory and application,” Physics Reports, vol. 907, pp. 1–68, 2021. Percolation on complex networks: Theory and application.
[49] U. Brandes, S. P. Borgatti, and L. C. Freeman, “Maintaining the duality of closeness and betweenness centrality,” Social Networks, vol. 44, pp. 153–159, 2016.
[50] C. B. Evans, T.S., “Linking the network centrality measures closeness and degree,” Commun Phys, vol. 5, no. 172, 2022.
[51] C. Molinero and S. Thurner, “How the geometry of cities determines urban scaling laws,” Journal of the Royal Society interface, vol. 18, no. 176, p. 20200705, 2021.
[52] F. L. Ribeiro and D. Rybski, “Mathematical models to explain the origin of urban scaling laws,” Physics Reports, vol. 1012, pp. 1–39, 2023.
[53] M. Guo, L. Yang, F. Shen, L. Zhang, A. Li, Y. Cai, and C. Zhou, “Impact of socioeconomic environment and its interaction on the initial spread of COVID-19 in mainland China,” Geospatial Health, vol. 17, Mar. 2022.
[54] E. Arcaute, E. Hatna, P. Ferguson, H. Youn, A. Johansson, and M. Batty, “Constructing cities, deconstructing scaling laws,” Journal of the Royal Society interface, vol. 12, no. 102, 2015.
[55] W. R. Tobler, “A computer movie simulating urban growth in Detroid region,” Econo- mic Geography, vol. 46, pp. 234–240, 1970.
[56] P. H. N. Santos, M. G. Cruz, and W. F. S. Santos, “City science and urban planning: geoprocessing as an instrument for municipal strategic planning,” vol. 6, 2022.
[57] M. Batty, “The size, scale, and shape of cities,” Science (New York, N.Y.), vol. 319, pp. 769–71, 03 2008.
[58] M. Batty, The New Science of Cities. The MIT Press, 2013.
[59] M. Batty, “A theory of city size,” Science, vol. 340, no. 6139, pp. 1418–1419, 2013.
[60] S. G. Ortman, J. Lobo, and M. E. Smith, “Cities: Complexity, theory and history,” PLOS ONE, vol. 15, pp. 1–24, 12 2020.
[61] M. Lee and H. e. a. Barbosa, H.AND Youn, “Morphology of travel routes and the organization of cities.,” Nat Commun, vol. 8, 12 2017.
[62] M. Barthelemy, “The statistical physics of cities,” Nature Reviews Physics, vol. 1, no. 6, pp. 406–415, 2019.
[63] A. F. Siegenfeld and Y. Bar-Yam, “An introduction to complex systems science and its applications,” Complexity, vol. 2020, 2020.
[64] F. L. Ribeiro and W. R. Pereira, “A gentle introduction to scaling laws in biological systems,” arXiv preprint arXiv:2105.01540, 2021.
[65] E. Arcaute and J. J. Ramasco, “Recent advances in urban system science: Models and data,” PLOS ONE, vol. 17, pp. 1–16, 08 2022.
[66] Corral, G. Boleda, and R. Ferrer-i Cancho, “Zipf’s law for word frequencies: Word forms versus lemmas in long texts,” PLOS ONE, vol. 10, pp. 1–23, 07 2015.
[67] K. K. . M. B. Verscharen, D., “The multi-scale nature of the solar wind.,” Living Rev Sol Phys, no. 16, 2019.
[68] A. Johansen, E. Jacquet, J. Cuzzi, A. Morbidelli, and M. Gounelle, “New paradigms for asteroid formation,” Asteroids IV, 05 2015.
[69] F. Caccioli, P. Barucca, and T. Kobayashi, “Network models of financial systemic risk: A review,” Journal of Computational Social Science, vol. 1, 01 2018.
[70] D. A. Minton, C. I. Fassett, M. Hirabayashi, B. A. Howl, and J. E. Richardson, “The equilibrium size-frequency distribution of small craters reveals the effects of distal ejecta on lunar landscape morphology,” Icarus, vol. 326, pp. 63–87, 2019.
[71] D. McKenzie and M. Kennedy, “Power laws reveal phase transitions in landscape con- trols of fire regimes,” Nature communications, vol. 3, p. 726, 03 2012.
[72] ́A. Corral, A. Oss ́o, and J. Llebot, “Scaling of tropical-cyclone dissipation,” Nature Physics, vol. 6, pp. 693–696, Jan. 2010.
[73] S. Tebbens, “Landslide scaling: A review,” Earth and Space Science, vol. 7, 01 2020.
[74] M. Menabde, A. Seed, and G. Pegram, “A simple scaling model for extreme rainfall,” Water Resources Research, vol. 35, pp. 335–339, Jan. 1999.
[75] L. Bettencourt and G. West, “A unified theory of urban living,” Nature, vol. 467, pp. 912–3, 10 2010.
[76] L. M. A. Bettencourt, “The origins of scaling in cities,” Science, vol. 340, no. 6139, pp. 1438–1441, 2013.
[77] F. L. Ribeiro and W. R. L. S. Pereira, “A gentle introduction to scaling relations in biological systems,” Revista Brasileira de Ensino de F ́ısica, vol. 44, no. Rev. Bras. Ensino F ́ıs., 2022 44, p. e20210291, 2022.
[78] Y. Natalia, C. Faes, T. Neyens, P. Chys, N. Hammami, and G. Molenberghs, “Fractal dimension based geographical clustering of covid-19 time series data,” Scientific Reports, vol. 13, 03 2023.
[79] A. Stier, M. Berman, and L. Bettencourt, “Early pandemic covid-19 case growth rates increase with city size,” Urban Sustain, vol. 1, no. 31, 2021.